//
//  WBStatusListViewModel.swift
//  微博
//
//  Created by lipengfei on 15/9/8.
//  Copyright © 2015年 lipengfei. All rights reserved.
//

import UIKit
import ReactiveCocoa
import SDWebImage
/// 微博列表的视图模型，访问网络，获取微博数据
class WBStatusListViewModel: NSObject {
   lazy var statuses:[WBStatusViewModel] = [WBStatusViewModel]()
    ///  加载微博
    func loadStatus() -> RACSignal{
        return RACSignal.createSignal({ (subscriber) -> RACDisposable! in
            //通过网络工具类，获取数据
            WBNetworkTools.sharedTools.loadStatus().subscribeNext({ (result) -> Void in
                // result 就是我要想要的 微博数据
                // 首先判断result 中的statuses字典数组
                guard let array = result["statuses"] as? [[String : AnyObject]] else{
                    print("没有正确的数据")
                    return
                }
               // 使用一个数组，保存当前加载的微博，可以通过数组的变化，判断新闻的更新
                var arrayM = [WBStatusViewModel]()
                
                // 获得数据之后，遍历数组，进行字典转模型
                for dict in array{
                    // 将微博模型保存到数组中
                    arrayM.append(WBStatusViewModel(status: WBStatus(dict:dict)))
                }
                //将图片进行缓存，并将数组保存到微博模型中
                self.cacheWebImage(arrayM, finished: {
                   
                    self.statuses = arrayM
                    //print(self.statuses)
                    //通知条用方数据加载完成
                    subscriber.sendCompleted()
                    
                })
                
                
                }, error: { (error) -> Void in
                    subscriber.sendError(error)
            })
        })
    }
    // 缓存图片
    private func cacheWebImage(array:[WBStatusViewModel],finished:() -> ()){
        //目标：只缓存单张的图片
        //判断 微博模型是否只包含一张图片，如果只包含一张图品，进行缓存，不是的不缓存
        // continue 退出本次循环进入下次循环
//        使用调度组，统一进行管理，当所有的下载都完成之后，统一回到主线程，
        let group = dispatch_group_create()
        //记录图片的大小
        var dataLength = 0
        for statusModel in array{
            // ?? 的使用 当条件为nil 的时候，赋值后面的
            let count = statusModel.thumbnailURLs?.count ?? 0
            if count != 1{
                continue
            }
            // 走到这里，说明 找到了 单张的图片
            print(statusModel.thumbnailURLs)
            dispatch_group_enter(group)
            // 使用SDWebImage下载图片（自动缓存到cache文件中）
            SDWebImageManager.sharedManager().downloadImageWithURL(statusModel.thumbnailURLs![0], options: [], progress: nil, completed: { (image, _, _, _, _) -> Void in
                //下载好图片之后，
                // 虽然得到image 已经缓存完毕，但是如果是个错误的url 依然，不能缓存图片，所以需要判断 判断得到的image 是不是nil
                //如果图片不是nil ，进行叠加计算缓存的图片的总大小
                if image != nil{
                    // 将图片转换成二进制数据
                    let data = UIImagePNGRepresentation(image)
                    dataLength += data?.length ?? 0
                }
                //需要的操作执行完毕之后，出组
                dispatch_group_leave(group)
            })
        }
        //当全部出组之后，说明图片全部被缓存了
        dispatch_group_notify(group, dispatch_get_main_queue()) {
            print("缓存图片完成\(dataLength / 1024)K")
            //执行闭包
            finished()
        }
    }
}
